home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / lantimes / 90_02 / get.c next >
Text File  |  1989-12-11  |  3KB  |  106 lines

  1. /*-------------------------------------------------------------------------*
  2.  * get.c -- get a file from remote node
  3.  *
  4.  * Usage:  get \\nodeid
  5.  *         get \\nodeid filename.ext
  6.  *
  7.  * The remote node must also run 'put' to complete the transfer.
  8.  * \\nodeid and filename.ext are command line arguments
  9.  *
  10.  * Compiler: Microsoft C Version 5.0.
  11.  *
  12.  * Tom Nolan 7/12/89
  13.  *
  14.  *-------------------------------------------------------------------------*/
  15.  
  16. #include <stdio.h>
  17. #include <io.h>
  18. #include "netbios.h"
  19.  
  20. void nreceive(char *node, char *fname);
  21. void usage(void);
  22.  
  23. typedef struct                            /* network information block definition    */
  24. {
  25.     char fname[MAXPATH];                /* file name for transmission                    */
  26.     long fsize;                            /* size of file in bytes                        */
  27.     char sender[NODE_NAME_LEN];    /* name of sending node                            */
  28.     char receiver[NODE_NAME_LEN];    /* name of receiving node                        */
  29. }
  30. NETINFO;
  31.  
  32. char buf[4096];                        /* buffer for send/receive data                */
  33.  
  34. #define diag printf                    /* remove "printf" to turn off diags        */
  35.  
  36. /*-------------------------------------------------------------------------*/
  37. main(int argc, char **argv)
  38. {
  39.     if(argc == 2 && isnodename(argv[1]))
  40.         nreceive(argv[1], "");
  41.     else
  42.         if(argc == 3 && isnodename(argv[1]) && !isnodename(argv[2]))
  43.             nreceive(argv[1], argv[2]);
  44.         else
  45.             usage();
  46.     exit(0);
  47. }
  48.  
  49. /*-------------------------------------------------------------------------*/
  50. void nreceive(char *node, char *fname)            /* network receive                */
  51. {
  52.     NETINFO netinfo;                                    /* network information block    */
  53.     int lsn;                                                /* logical session number        */
  54.     int len;                                                /* length of received data        */
  55.     char name[NODE_NAME_LEN];                        /* remote node name                */
  56.     FILE *fp;                                            /* file stream pointer            */
  57.     char *fn;                                            /* file name pointer                */
  58.  
  59.     do                                                        /* receive a datagram            */
  60.     {
  61.         diag("Receiving datagram\n");                /* from requested node...        */
  62.         recv_datagram(&netinfo, sizeof(netinfo), name);    /* if sender isn't    */
  63.     }                                                                    /* correct one,        */
  64.     while(strcmp(name, node));                        /* ...try again                    */
  65.  
  66.     strcpy(netinfo.sender, node);                    /* fill in sender's name        */
  67.     diag("Sending datagram\n");                    /* and return the datagram        */
  68.     send_datagram(netinfo.sender, &netinfo, sizeof(netinfo));
  69.  
  70.     lsn = listen(netinfo.sender, netinfo.receiver);        /* wait for call         */
  71.     if(!lsn)
  72.     {
  73.         printf("Error establishing link to %s\n",node);
  74.         exit(1);
  75.     }
  76.  
  77.     fn = (!*fname) ? netinfo.fname : fname;        /* file name to create        */
  78.  
  79.     diag("Communicating on LSN %d\n",lsn);
  80.     fp = fopen(fn, "wb");                                /* create received file        */
  81.  
  82.     printf("Packets:");
  83.     while(netinfo.fsize > 0)                            /* do for the whole file    */
  84.     {
  85.         diag(".");
  86.         len = receive(lsn, buf, sizeof(buf));        /* receive a buffer            */
  87.         fwrite(buf, 1, len, fp);                        /* write it to the file        */
  88.         netinfo.fsize -= len;                            /* track bytes remaining    */
  89.     }
  90.  
  91.     hangup(lsn);                                            /* terminate session            */
  92.     fclose(fp);                                                /* and close file                */
  93.     printf("\nReceived file %s\n", fn);
  94. }
  95.  
  96. /*-------------------------------------------------------------------------*/
  97. void usage(void)
  98. {
  99.     printf( "Get v1.00 T. Nolan - 7/12/89\n"
  100.         "usage:\n\n"
  101.         "get \\nodeid filename.ext  -  get filename.ext from nodeid\n"
  102.         "get \\nodeid               -  get using sender's file name\n\n"
  103.         "Get and put must be run on each node to transfer a file.\n");
  104.     exit(1);
  105. }
  106.